package demo4;

public class Test {
    public static void func(Plate<?  extends Fruit> plate) {//上界Fruit
        System.out.println(plate.getData());
        Fruit apple=plate.getData();//这个没问题
//        plate.setData(new Apple());//不行，因为具体不知道是那个子类
//        plate.setData(new Banana());//不行，因为具体不知道是那个子类
//        plate.setData(new Fruit());//不行，因为new Fruit()里是Fruit及其子类，不知道具体是什么

    }

    public static void func1(Plate<? super Fruit> plate) {//下界Fruit
        System.out.println(plate.getData());
        plate.setData(new Fruit());
        plate.setData(new Apple());
        plate.setData(new Banana());
//        plate.setData(new Food());//不行，因为Food之上的可能还有，具体不知道是啥
//        Fruit fruit=plate.getData();//不行，必须要强转为Fruit,因为Fruit之上还有，不知道具体是啥.
        Fruit fruit=(Fruit) plate.getData();



    }



    public static void main(String[] args) {
        Plate<Apple> plate=new Plate<>();
        plate.setData(new Apple());
        func(plate);
        Plate<Banana> plate1=new Plate<>();
        plate1.setData(new Banana());
        func(plate1);
        Plate<Fruit> plate2=new Plate<>();
        plate2.setData(new Fruit());
        func(plate2);
        func1(plate2);
        Plate<Food> plate3=new Plate<>();
        plate3.setData(new Food());
      func1(plate3);

    }
}
